//
//  CZEmoticonTools.swift
//  CZVVeiBo
//
//  Created by smile on 2017/8/6.
//  Copyright © 2017年 itcast. All rights reserved.
//

import UIKit
// 最大的列数 行数 个数
let EMOTICONMAXCOL = 7
let EMOTICONMAXROW = 3
let EMOTICONMAXCOUNT = 20

class CZEmoticonTools: NSObject {
    // 全局访问点
    static let share: CZEmoticonTools = CZEmoticonTools()
    
    // 获取emoticonBundle
    lazy var emoticonBundle: Bundle = {
        // 路径
        let path = Bundle.main.path(forResource: "Emoticons.bundle", ofType: nil)!
        let bundle = Bundle(path: path)!
        return bundle
    }()
    
    // 默认（图片）
    lazy var defaultEmoticons:[CZEmoticonModel] = {
        return self.getEmoticons(name: "default")
    }()
    
    // emoji
    lazy var emojiEmoticons:[CZEmoticonModel] = {
        return self.getEmoticons(name: "emoji")
    }()
    
    // lxh(图片）
    lazy var lxhEmoticons:[CZEmoticonModel] = {
        return self.getEmoticons(name: "lxh")
    }()
    
    // 三维数组
    lazy var allEmoticons:[[[CZEmoticonModel]]] = {
        return [
          self.getEmoticonGroup(emoticons: self.defaultEmoticons),
          self.getEmoticonGroup(emoticons: self.emojiEmoticons),
          self.getEmoticonGroup(emoticons: self.lxhEmoticons)
        ]
    }()
    
}

extension CZEmoticonTools{
    // 一维数组转二维数组
    func getEmoticonGroup(emoticons:[CZEmoticonModel]) -> [[CZEmoticonModel]]{
        // 通过一维数组.count 计算出显示多少页
        let count = emoticons.count
        let pageCount = (count + EMOTICONMAXCOUNT - 1)/EMOTICONMAXCOUNT
        // 创建一个临时可变的二位空数组
        var tempList:[[CZEmoticonModel]] = [[CZEmoticonModel]]()
        // 遍历页数count
        for i in 0..<pageCount{
            let loc = EMOTICONMAXCOUNT * i
            var len = EMOTICONMAXCOUNT
            // 解决越界问题
            if loc + len  > count {
                len = count - loc
            }
            // 范围
            let range = NSRange(location: loc, length: len)
            // 数组的截取
            let array = (emoticons as NSArray).subarray(with: range) as! [CZEmoticonModel]
            tempList.append(array)
        }
        
        return tempList
    }
    // 获取bundle文件中的plist数据
    fileprivate func getEmoticons(name: String) -> [CZEmoticonModel]{
        // 路径
        let file = emoticonBundle.path(forResource: "\(name)/info.plist", ofType: nil)!
        let plistArray = NSArray(contentsOfFile: file)!
        // 模型数组
        let tempList = NSArray.yy_modelArray(with: CZEmoticonModel.self, json: plistArray) as! [CZEmoticonModel]
        // 给图片表情allPathpng设置全路径
        for model in tempList{
            model.allPathPng = "\(name)/\(model.png ?? "")"
        }
        return tempList
    }
    
    // 通过图片描述 获取对应的模型
    func getEmoticonModel(chs: String) -> CZEmoticonModel?{
        // 遍历(默认)
        for model in defaultEmoticons{
            // chs是否相等
            if model.chs == chs {
                return model
            }
        }
        // lxh
        for model in lxhEmoticons{
            // chs是否相等
            if model.chs == chs {
                return model
            }
        }
        // 如果没有匹配到
        return nil
    }

}
